/* File	: CommandProcessor.h
*  Dibuat Oleh : 23512077/ Ni Made Satvika Iswari
*/

#ifndef _CommandProcessor_H
#define _CommandProcessor_H
#include "../Command/command.h"
#include "../File/File.h"
#include <string>
#include <vector>
#include <iostream>
#include <fstream>
using namespace std;

class CommandProcessor : public File{
	public:
		/* 4 sekawan */
		CommandProcessor();
		/* Constructor */
		CommandProcessor(vector<command>);
		/* Constructor berparameter */
		CommandProcessor(const CommandProcessor&);
		/* Copy constructor */
		~CommandProcessor();
		/* Destructor */
		CommandProcessor& operator= (const CommandProcessor&);
		/* Overloading operator = */
		
		bool IsValid(command);
		/* Mengembalikan true jika command inputan user sesuai template command referensi pada RefCommand */
		/* Pre kondisi : RefCommand sudah diinisialisasi */
		
		bool IsEmpty();
		/* Mengembalikan true jika UserCommand koosng, false jika tidak */
		
		int AddCommand(command);
		/* Mengembalikan 1 jika command sesuai dan selesai ditambahkan, 0 jika command tidak sesuai */
		
		int DelCommand(command);
		/* Pre kondisi : UserCommand tidak kosong */
		/* Mengembalikan 1 jika command ditemukan dan dihapus, 0 jika tidak */
		
		void Empty();
		/*I.S. UserCommand tidak kosong */
		/*F.S. Mengosongkan memori yang menyimpan command dari user (UserCommand) */
		
		void DisplayRefCommand();
		/*I.S. RefCommand mungkin kosong */
		/*F.S. Isi RefCommand ditampilkan satu per satu ke layar */
		
		void DisplayUserCommand();
		/*I.S. UserCommand mungkin kosong */
		/*F.S. Isi UserCommand ditampilkan satu per satu ke layar */
		
		void ReadFile(string NamaFile);
		/*I.S File mungkin belum terbentuk */
		/*F.S Membaca file yang berisi daftar command yang valid */
		
		void SaveFile(string NamaFile);
		/*I.S File mungkin belum terbentuk, NamaFile sesuai dengan format */
		/*F.S Menuliskan command valid dari user ke dalam sebuah file*/
		
		/* Getter */
		vector<command> getUserCommand();
		/* Mengembalikan command user dengan waktu dan tanggal */
		static vector<string> getRefCommand();
		/* Mengembalikan command referensi tanpa waktu dan tanggal */
				
		//static vector<command> RefCommand;
		
	private:
		vector<command> UserCommand;		//command masukan user
		static vector<command> RefCommand;	//command yang benar sbg referensi
};

#endif